package k2_oop.p5_abstractAndInterface.demo04;

public class TestDemo4 {
    public static void main(String[] args) {

        /**
         * 1.直接new接口，直接重写了接口中的抽象方法，相当与类
         * 2.正常类是与文件同名，在最外层定义，这个类是在普通类的里面定义的
         * 3.这个类没有名字
         * 匿名内部类
         *     适用条件：抽象方法不多 逻辑比较简单
         */
        USB disk = new USB() {
            @Override
            public boolean download(String string) {
                if(string!=null && !string.equals("")){
                    return true;
                }else{
                    return false;
                }
            }
        };

        /**
         * 再一次对匿名内部类做了简化
         * 前提条件，接口中必须只能有且仅有一个抽象方法，否则就不知道该调用哪个方法了
         * 只有一个抽象方法的接口，可以叫做函数式接口
         * 这种写法叫做 lambda 表达式 在匿名内部类的基础上再对方法进行匿名
         *
         */
        USB camera = string -> {
                            System.out.println("照相机");
                            return true;
                    };

        /**
         * 如果方法体中只有一个语句需要执行，大括号也可以省略
         * 如果此时有返回值，return关键字也可以省略
         */
        USB mp3 = str -> false;

        System.out.println(mp3.download(""));

    }
}
